package com.lb.uts.util;
import java.util.Date;
import java.util.UUID;

public class IdUtils {
    private static IdGenerator idGenerator;

    /**
     * 初始化节点和数据中心编号，仅执行一次
     * @param workerId 节点编号：0 ~ 32
     * @param dataCenterId 数据中心编号：0 ~ 32
     */
    public synchronized static void init(long workerId, long dataCenterId) {
        if(idGenerator == null) {
            idGenerator = new IdGenerator(workerId, dataCenterId);
        }
    }

    /**
     * 根据 UUID 生成 32 位字符串ID号, 使用时间模式"yyyyMMddHHmmssSSS", 替换 UUID 前端字符串
     * @return 带时间信息的UUID
     */
    public static synchronized String nextUUID() {
        UUID uuid = UUID.randomUUID();
        String uuidStr = uuid.toString().replaceAll("-", "");
        StringBuilder sb = new StringBuilder();
        String currentTime = TimeUtils.format(new Date(), TimeUtils.ISO_BASE_DATETIME_MILLI);
        sb.append(currentTime).append(uuidStr.substring(currentTime.length(), uuidStr.length()));
        return sb.toString();
    }

    /**
     * 根据 Twitter 开源的 SnowFlack 算法生成18位整数ID
     * @return 全局唯一ID
     */
    public synchronized static Long nextLongId() {
        if(idGenerator == null) {
            idGenerator = IdGenerator.get();
        }
        return idGenerator.nextId();
    }
}
